import 'package:flutter/material.dart';
import 'package:mybase/base/widget/indicators/material_indicator.dart';
import 'package:mybase/base/widget/layout/FFImageButton.dart';

/**
 * @title 顶部tabbar
 */
mixin JJTabBar {
  late TabController tabController;

  /// 是否滚动
  bool isScrollable = false;

  /// tab对齐方式
  TabAlignment? tabAlignment;

  /// 指示器的大小
  TabBarIndicatorSize? indicatorSize = TabBarIndicatorSize.label;

  ///mark-内部
  /// 内部方法
  Widget tabbar(BuildContext context) {
    return FFImageButton(
      heigth: tabbarHeight(context),
      width: tabbarWidth(context),
      image: tabbarWidget(context),
      color: tabbarBgColor(context),
      margin: tabbarMargin(context),
      padding: tabbarPadding(context),
    );
  }

  ///mark-边距

  EdgeInsetsGeometry? tabbarMargin(BuildContext context) {}

  // tabbar的内边距
  EdgeInsetsGeometry? tabbarInPadding(BuildContext context) {}

  EdgeInsetsGeometry? tabbarPadding(BuildContext context) {}

  /// 指示器的padding: bottom可调节文字与指示器的距离
  EdgeInsetsGeometry tabbarIndicatorPadding(BuildContext context) {
    return EdgeInsets.zero;
  }

  ///mark-布局

  /// tabbar 可以重新实现自定义
  Widget tabbarWidget(BuildContext context) {
    return TabBar(
      controller: tabController,
      tabs: tabbarTitles(context),

      padding: tabbarInPadding(context),

      ///底部 分隔线颜色
      dividerColor: tabbarDividerColor(context),

      ///文本颜色
      labelColor: tabbarLabelColor(context),

      ///文本样式
      labelStyle: tabbarLabelStyle(context),

      ///未选中文本颜色
      unselectedLabelColor: tabbarUnselectedLabelColor(context),

      ///未选中文本样式
      unselectedLabelStyle: tabbarUnselectedLabelStyle(context),

      ///可以滚动，滚动则向左靠，不滚动则居分
      isScrollable: isScrollable,
      indicatorSize: indicatorSize,
      tabAlignment: tabAlignment,

      ///指示器
      indicator: tabbarIndicator(context),
      indicatorPadding: tabbarIndicatorPadding(context),
      onTap: (index) {
        tabbarOnTap(index);
      },
    );
  }

  /// 自定义标题View, 一般用tabbarTitlesOnly
  List<Widget> tabbarTitles(BuildContext context) {
    List<String> titles = tabbarTitlesOnly(context);

    return titles
        .map(
          (e) =>
          Tab(
            text: e,
            height: tabbarHeight(context),
          ),
    )
        .toList();
  }

  /// 底部的分隔线颜色
  Color? tabbarDividerColor(BuildContext context) {
    return Colors.transparent;
  }

  /// 选中的 文本颜色
  Color? tabbarLabelColor(BuildContext context) {
    return Colors.white;
  }

  /// 未选中的 文本颜色
  Color? tabbarUnselectedLabelColor(BuildContext context) {
    return Colors.white;
  }

  /// 选中的 文本样式
  TextStyle? tabbarLabelStyle(BuildContext context) {}

  /// 未选中的 文本样式
  TextStyle? tabbarUnselectedLabelStyle(BuildContext context) {}

  /// tabbar背景颜色
  Color? tabbarBgColor(BuildContext context) {
    return Colors.transparent;
  }

  /// tabbar的高度
  double tabbarHeight(BuildContext context) {
    return 40;
  }

  /// tabbar的宽度
  double tabbarWidth(BuildContext context) {
    return MediaQuery
        .of(context)
        .size
        .width;
  }

  /// 指示的样式，圆角
  Decoration? tabbarIndicator(BuildContext context) {
    return MaterialIndicator(
      color: Colors.white,
      height: 2,
      topRightRadius: 0,
      topLeftRadius: 0,
    );
  }

  ///mark-必须调用

  /// 初始化tabbar
  void initTabbar(int count, TickerProvider vsync, {int initialIndex = 0,}) {
    tabController = TabController(length: count, vsync: vsync, initialIndex: initialIndex);
    //tabController.addListener(() {});
  }

  ///外部类 在build方法中调用这个
  Widget tabbarBuild(BuildContext context, {
    bool tabbarView = true,
  }) {
    if (tabbarView) {
      return Column(
        children: [
          tabbar(context),
          Expanded(
            child: TabBarView(
              controller: tabController,
              children: tabbarChilds(context),
            ),
          ),
        ],
      );
    } else {
      return tabbar(context);
    }
  }

  /// 只有tabbar
  Widget tabbarView1(BuildContext context) {
    return tabbar(context);
  }

  /// 只有tabbarView
  Widget tabbarView2(BuildContext context) {
    return TabBarView(
      controller: tabController,
      children: tabbarChilds(context),
    );
  }

  ///mark-必须实现

  /// 标题数组
  List<String> tabbarTitlesOnly(BuildContext context) {
    return ["XXX", "YYY"];
  }

  /// 子页面数组
  List<Widget> tabbarChilds(BuildContext context) {
    return [
      Container(color: Colors.red),
      Container(color: Colors.white),
    ];
  }

  ///mark-事件

  /// 点击了index
  void tabbarOnTap(index) {}
}
